package org.pps.gl.server.datastore;

import java.util.ArrayList;
import java.util.List;
import com.google.appengine.api.datastore.Entity;

/**
 * Cette classe prend en charge toutes les operations en rapport avec l'entitée
 * École.
 * 
 * Une École a les propriétés suivantes : - emailUser - nom (de l'école)
 * 
 */
public class Ecole {

	/**
	 * Créer une entité École pour une Étude spécifique d'un utilisateur.
	 * 
	 * @param etude
	 *            : étude concernée.
	 * @param emailUser
	 *            : email de l'utilisateur concerné.
	 * @param nom
	 *            : String représentant le statut de l'utilisateur.
	 * @return la nouvelle entité créée.
	 */
	public static Entity createEcole(Entity etude, String emailUser, String nom) {

		if (etude != null) {
			Entity ecole;
			ecole = new Entity("Ecole", etude.getKey());
			ecole.setProperty("email_user", emailUser);
			ecole.setProperty("nom", nom);
			Util.persistEntity(ecole);
			return ecole;
		} else
			return null;
	}

	/**
	 * Méthode qui permet la mise à jour d'une propriété du de l'ecole.
	 * 
	 * @param ecole
	 * @param property
	 * @param value
	 */
	public static void updateEcole(Entity ecole, String property, String value) {

		// Mise à jour de la propriété
		ecole.setProperty(property, value);
		Util.persistEntity(ecole);
	}

	/**
	 * Récupère l'ecole correspondant à une étude.
	 * 
	 * @param etude
	 *            : étude correspondant
	 * @return: École entity.
	 */
	public static Entity getEcole(Entity etude) {
		return Util.listChildren("Ecole", etude.getKey()).iterator().next();

	}

	/**
	 * Récupère les écoles correspondantes a l'email d'un user.
	 * 
	 * @param emailUser
	 *            : email d'un user
	 * @return profil entity
	 */
	public static Iterable<Entity> getEcole(String emailUser) {
		return Util.listEntities("Ecole", "email_user", emailUser);
	}

	public static List<String> getAllEcoles() {

		List<String> ret = new ArrayList<String>();
		Iterable<Entity> results = Util.listEntities("Ecole", null, null);

		for (Entity e : results) {
			if (!ret.contains(e.getProperty("nom").toString()))
				ret.add(e.getProperty("nom").toString());
		}

		System.out.println(ret);
		return ret;
	}

	/**
	 * Efface l'école d'un utilisateur
	 * 
	 * @param userEmail
	 *            : email d'un utilisateur.
	 */
	public static String deleteEcole(Entity entity) {
		// Entity entity = getProfil(userEmail);
		if (entity != null) {
			if (null != Specialite.getSpecialite(entity))
				Specialite.deleteSpecialite(Specialite.getSpecialite(entity));
			Util.deleteEntity(entity.getKey());
			return ("Ecole deleted successfully.");
		} else
			return ("Ecole not found");
	}

	public static String getNomEcole(Entity ecole) {
		return (String) ecole.getProperty("nom");
	}

}
